﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Cofe.Core.Implements;

namespace Cofe.Core.Property
{
    public interface IPropertyExpressionDefinitions : ICofeService
    {
        /// <summary>
        /// The enumeration the property expression definition defined on.
        /// </summary>
        Type Category { get; }
        
        Expression<Func<CofeSystemInfo, T>> GetPropertyExpression<T>(object property);

        Expression<Func<CofeSystemInfo, PropertyPair>> GetPropertyPairExpression(object property);

        /// <summary>
        /// Get all supported properties.
        /// </summary>
        /// <returns></returns>
        IEnumerable<object> GetSupportedProperties();        
    }
}
